﻿using UnityEngine;
using System.Collections;
// Require a character controller to be attached to the same game object
[RequireComponent (typeof(CharacterMotor))] 
[AddComponentMenu ("Character/FPS Input Controller")]

public class FPSInputController:MonoBehaviour
{
	public CharacterMotor motor;
	//public Vector3 m_InputMoveDirection;
	// Use this for initialization
	void Awake () 
	{
			motor = GetComponent<CharacterMotor> ();
	}

	// Update is called once per frame
	void Update () {
		// Get the input vector from keyboard or analog stick
		Vector3 m_DirectionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
		
		if (m_DirectionVector != Vector3.zero) 
		{
			// Get the length of the directon vector and then normalize it
			// Dividing by the length is cheaper than normalizing when we already have the length anyway
		 float m_DirectionLength = m_DirectionVector.magnitude; 
			m_DirectionVector = m_DirectionVector / m_DirectionLength; 
			
			// Make sure the length is no bigger than 1
			m_DirectionLength = Mathf.Min(1, m_DirectionLength);
			
			// Make the input vector more sensitive towards the extremes and less sensitive in the middle
			// This makes it easier to control slow speeds when using analog sticks
			m_DirectionLength = m_DirectionLength * m_DirectionLength; 
			
			// Multiply the normalized direction vector by the modified length
			m_DirectionVector = m_DirectionVector * m_DirectionLength; 
		}
		
		// Apply the direction to the CharacterMotor
		motor.m_InputMoveDirection = transform.rotation * m_DirectionVector;
		motor.m_InputJump = Input.GetButton("Jump");
	}
}